Module এবং ClassLoader এর মধ্যে সম্পর্ক

Java Technologies - Java.lang প্যাকেজ (Java.lang Package) - Module এবং ModuleLayer
255

Java 9 এ Modules সিস্টেম (JPMS - Java Platform Module System) চালু করার মাধ্যমে Java-তে modules এর ধারণা আসছে। Modules হলো একটি নতুন ফিচার যা কোডের সংগঠন এবং ইন্সটলেশন সুবিধা প্রদান করে। এটি প্রোগ্রামের মডুলারাইজেশন এবং সিকিউরিটি বৃদ্ধি করার জন্য ব্যবহৃত হয়। ClassLoader Java-র একটি পুরোনো ধারণা, যা ক্লাস লোডিং এবং ডাইনামিক ক্লাস রেজল্যুশন পরিচালনা করে।

এই দুইটি (Modules এবং ClassLoader) একে অপরের সাথে সংযুক্ত। ক্লাস লোডার Modules এর অন্তর্গত ক্লাসগুলি লোড করতে ব্যবহৃত হয়, এবং Modules একটি ক্লাসের লোডিং প্রক্রিয়াকে প্রভাবিত করতে পারে।

1. Module System (JPMS)

Java Platform Module System (JPMS) হল একটি মডুলার আর্কিটেকচার যা Java 9-এ পরিচিত হয়। এটি কোডের একাধিক অংশকে একত্রে একটি মডিউলে সংগঠিত করতে সহায়তা করে এবং মডিউলগুলির মধ্যে নির্ভরতাগুলি ঘোষণা করা হয়।

Module System-এর মূল ধারণা:

  • Module: একটি module হল একটি গোষ্ঠী বা প্যাকেজ যা এক বা একাধিক ক্লাস, ইন্টারফেস, কন্সট্যান্ট, এবং রিসোর্স ধারণ করতে পারে। একটি মডিউল একটি module-info.java ফাইলের মাধ্যমে সংজ্ঞায়িত করা হয়।
  • Exports: আপনি কোন প্যাকেজ বা ক্লাস মডিউলের বাইরের ক্লাসের জন্য উপলব্ধ করতে চান, তা exports কিওয়ার্ডের মাধ্যমে নির্ধারণ করেন।
  • Requires: একটি মডিউল কোন অন্য মডিউলটি ব্যবহার করবে তা requires কিওয়ার্ডের মাধ্যমে নির্ধারণ করা হয়।

Example of module-info.java:

module mymodule {
    exports com.myapp.utils;
    requires java.base;
}

এখানে, mymodule মডিউল com.myapp.utils প্যাকেজটি বাইরের ব্যবহারকারীদের জন্য উন্মুক্ত করছে এবং java.base মডিউলের উপর নির্ভরশীল।


2. ClassLoader:

ClassLoader হল Java-র একটি ফিচার যা JVM (Java Virtual Machine) কে ক্লাস লোড করার জন্য দায়িত্বশীল। এটি একটি ক্লাস বা রিসোর্স সিস্টেমের মধ্যে থেকে লোড করে এবং ক্লাস ব্যবহারের জন্য প্রস্তুত করে।

ClassLoader এর কাজ:

  • Dynamic Loading: যখন কোনও ক্লাস প্রথমবার ব্যবহৃত হয়, তখন ক্লাস লোডার সেই ক্লাসটি লোড করে।
  • Classpath Searching: ক্লাস লোডার classpath বা module path (যখন মডিউল সিস্টেম ব্যবহৃত হয়) এর মধ্যে খোঁজে ক্লাস খুঁজে বের করে।
  • Delegation Model: Java-তে ক্লাস লোডার সাধারণত একটি delegation model অনুসরণ করে, যেখানে একটি ক্লাস লোডার প্রথমে পিতামাতার ক্লাস লোডারে ক্লাস লোড করতে পাঠায়।

Types of ClassLoaders:

  1. Bootstrap ClassLoader: এটি JVM-এর অন্তর্গত, যা Java এর বেসিক ক্লাস (যেমন java.lang.* ক্লাস) লোড করে।
  2. Extension ClassLoader: এটি JRE-র lib/ext ডিরেক্টরি থেকে ক্লাস লোড করে।
  3. System ClassLoader: এটি ক্লাসপাথ থেকে ক্লাস লোড করে, যা অ্যাপ্লিকেশন বা ব্যবহারকারীর নির্দিষ্ট পাথ হয়।

Modules এবং ClassLoader এর মধ্যে সম্পর্ক:

Java 9 থেকে Modules সিস্টেমের সাথে ClassLoader এর সম্পর্ক পরিবর্তিত হয়েছে, কারণ মডিউল সিস্টেমের মাধ্যমে ক্লাস লোডিং প্রক্রিয়া আরও কন্ট্রোলড এবং সিকিউর করা হয়েছে।

Relationship between Modules and ClassLoader:

  1. Module Path vs Class Path:
    • যখন Modules সিস্টেম চালু হয়, তখন module path এবং classpath আলাদা হয়ে যায়। ক্লাস লোডারের মাধ্যমে ক্লাসগুলি classpath থেকে লোড করার পাশাপাশি মডিউল সিস্টেমের ক্লাস লোডিং এখন module path থেকে হয়।
    • মডিউল লোডিং এবং ক্লাস লোডিং আলাদা, তবে ClassLoader মডিউল থেকে ক্লাস লোড করার জন্য বিশেষভাবে কনফিগার করা হয়।
  2. Module Specific ClassLoader:
    • একটি মডিউলটির নিজস্ব ClassLoader থাকতে পারে। যখন একটি মডিউল নির্দিষ্ট ক্লাস বা ফাইল লোড করতে চায়, তখন এটি একটি custom ClassLoader ব্যবহার করতে পারে। ক্লাস লোডার সেই মডিউল থেকে ক্লাস বা রিসোর্স লোড করবে এবং মডিউল ডিপেনডেন্সি চেক করবে।
  3. Access Control Between Modules:
    • মডিউল সিস্টেম ক্লাসের এক্সেস কন্ট্রোলের একটি নতুন স্তর যোগ করেছে। একটি মডিউল যদি একটি ক্লাস export করে, তাহলে অন্য মডিউল সেই ক্লাসের অ্যাক্সেস করতে পারবে, অন্যথায় পারবে না। এই পদ্ধতি ক্লাস লোডারের মাধ্যমে নিয়ন্ত্রণ করা হয়, যেহেতু ক্লাস লোডার নির্দিষ্ট মডিউল থেকে ক্লাস লোড করবে এবং এক্সেস কন্ট্রোল পরিচালনা করবে।
  4. Module ClassLoader and Delegation:
    • যখন একটি ক্লাস লোডার মডিউলটি লোড করে, তখন এটি delegation model অনুসরণ করতে পারে। এটি একটি ক্লাস লোডারকে মডিউল থেকে ক্লাস লোড করার সময়, তার পিতামাতার ক্লাস লোডারের কাছে ক্লাস লোড করার জন্য পাঠায়। ফলে, মডিউল ক্লাস লোডার modules এবং class loading প্রক্রিয়া সংযুক্ত করতে ব্যবহৃত হয়।

Example: ClassLoader and Modules Interaction

Scenario:

Suppose you have a module that depends on another module, and you need to load classes dynamically from these modules.

// Define a module (module-info.java)
module myModule {
    requires java.base;
    exports com.mycompany.mypackage;
}
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class DynamicClassLoading {
    public static void main(String[] args) throws Exception {
        // Load a class dynamically from a module
        URL[] urls = {new URL("file:/path/to/your/module.jar")};
        URLClassLoader classLoader = new URLClassLoader(urls);

        Class<?> clazz = classLoader.loadClass("com.mycompany.mypackage.MyClass");

        // Dynamically invoke a method from the loaded class
        Method method = clazz.getMethod("myMethod");
        method.invoke(clazz.getDeclaredConstructor().newInstance());
    }
}

Explanation:

  • Module: The module myModule has dependencies on the java.base module and exports the com.mycompany.mypackage package.
  • ClassLoader: The URLClassLoader is used to dynamically load classes from the module (or JAR).
  • Method Invocation: Reflection is used to dynamically invoke a method of the loaded class.

This demonstrates how a ClassLoader and Modules work together to load and interact with classes at runtime in Java.


  • ClassLoader এবং Modules Java-তে একে অপরের সাথে নিবিড়ভাবে সম্পর্কিত। Modules সিস্টেম ক্লাস লোডিংকে আরও সুরক্ষিত এবং কন্ট্রোলড করে তোলে, যেখানে ClassLoader নির্দিষ্ট মডিউল থেকে ক্লাস লোড করতে ব্যবহৃত হয়।
  • মডিউল সিস্টেম Java-তে নির্দিষ্টভাবে ক্লাস লোডিংয়ের পদ্ধতিকে নিয়ন্ত্রণ করতে সাহায্য করে, এবং Module ClassLoader মডিউলের মধ্যে ক্লাস এবং রিসোর্স অ্যাক্সেসের নিরাপত্তা এবং এক্সেস কন্ট্রোল পরিচালনা করে।
  • এর মাধ্যমে কোডের নিরাপত্তা, পারফরম্যান্স এবং সিস্টেমের সহজ ব্যবস্থাপনা নিশ্চিত করা সম্ভব হয়।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...